package cn.tedu.cn.tedu.map;

import java.util.*;

/**本类用于测试Map接口*/
public class TestMap {
    public static void main(String[] args) {
        /**Map中的数据需要符合映射规则，一定要注意要同时指定K和V的数据类型
         * 至于K和V具体要指定成什么数据类型，取决于具体的业务要求*/
        Map<Integer,String> map = new HashMap<>();

        //向map集合中存入数据，注意方法是put(),并且需要存入一对值
        map.put(9527,"白骨精");
        map.put(9528,"黑熊精");
        map.put(9529,"鲤鱼精");
        map.put(9530,"孔雀精");
        map.put(9527,"女儿国国王");
        System.out.println(map);
        /**1.map中的value可以重复，比如我们可以存入两个孔雀精
         * 2.map中的key不允许重复，如果重复，后面的value会把前面的value覆盖掉
         * 3.map中存放着的都是无序的数据
         * 比如:女儿国国王与白骨精的key值都是9527，白骨精就被覆盖掉了*/

        //测试常用方法
//        map.clear();
//        System.out.println(map);

        System.out.println(map.isEmpty());//判断集合是否为空
        System.out.println(map.size());//5,获取map中键值对的个数
        System.out.println(map.containsKey(9527));//true,判断map中是否包含指定的键
        System.out.println(map.containsValue("白骨精"));//false,判断map中是否包含指定的值
        System.out.println(map.get(9527));//女儿国国王，根据key值获取对应的value
        System.out.println(map.remove(9529));//根据key值删除这个键值对

        //将map中的所有值取出存入Collection集合中
        //Collection<Type>中Type的类型，取决于map中value的类型
        Collection<String> values = map.values();
        System.out.println(values);


        //map集合的迭代方式一
        /**方式一:
         * 想遍历map中的数据，但是map本身没有迭代器，所以我们需要将map先转成set集合
         * Set<Key>:把map中所有的key值存入set集合中--keySet()*/
        Set<Integer> keyset = map.keySet();
        Iterator<Integer> it = keyset.iterator();
        while (it.hasNext()){
            Integer key = it.next();
            String value = map.get(key);
            System.out.println("{"+key+"**"+value+"}");
        }

        //map集合的迭代方式二
        /**想要遍历map集合，需要把map集合先转成set集合
         * 是把map中的每一对键值对看成一个Entry
         * map中有几对键值对，set里就有几个Entry*/
        Set<Map.Entry<Integer, String>> set2 = map.entrySet();
        Iterator<Map.Entry<Integer, String>> it2 = set2.iterator();
        while(it2.hasNext()){
            Map.Entry<Integer, String> entry = it2.next();
            System.out.println(entry);
        }
    }
}
